package co.inventario.modelo.negocio;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

import co.inventario.datos.sqlserver.OrdenCompraInsumoDAOSQLServer;
import co.inventario.datos.sqlserver.OrdenCompraDAOSQLServer;
import co.inventario.datos.sqlserver.InsumoDAOSQLServer;
import co.inventario.entidad.OrdenCompraInsumoDTO;
import co.inventario.entidad.OrdenCompraDTO;
import co.inventario.entidad.InsumoDTO;

public class OrdenCompraInsumoNegocio {

	public void crear(OrdenCompraInsumoDTO ordenCompraInsumoDTO, Connection connection) throws Exception, SQLException {
		OrdenCompraInsumoDAOSQLServer ordenCompraInsumoDAOSQLServer = new OrdenCompraInsumoDAOSQLServer();
		OrdenCompraInsumoDTO ordenCompraInsumoDTOConsultado = ordenCompraInsumoDAOSQLServer.consultarPorConsecutivo(ordenCompraInsumoDTO, connection);
		if (ordenCompraInsumoDTOConsultado == null) {
			ordenCompraInsumoDAOSQLServer.crear(ordenCompraInsumoDTO, connection);
		} else {
			throw new Exception("La orden de Compra del Insumo que intenta crear, ya existe.");
		}
	}

	public void actualizar(OrdenCompraInsumoDTO ordenCompraInsumoDTO, Connection connection) throws Exception, SQLException {
		OrdenCompraInsumoDAOSQLServer ordenCompraInsumoDAOSQLServer = new OrdenCompraInsumoDAOSQLServer();
		OrdenCompraInsumoDTO ordenCompraInsumoDTOConsultado = ordenCompraInsumoDAOSQLServer.consultarPorConsecutivo(ordenCompraInsumoDTO, connection);
		if (ordenCompraInsumoDTOConsultado != null) {
			ordenCompraInsumoDAOSQLServer.actualizar(ordenCompraInsumoDTO, connection);
		} else {
			throw new Exception("La orden de Compra del Insumo que intenta actualizar, no existe.");
		}
	}

	public OrdenCompraInsumoDTO consultarPorCodigo(OrdenCompraInsumoDTO ordenCompraInsumoDTO, Connection connection) throws Exception, SQLException {
		OrdenCompraInsumoDAOSQLServer ordenCompraInsumoDAOSQLServer = new OrdenCompraInsumoDAOSQLServer();
		OrdenCompraInsumoDTO ordenCompraInsumoDTOConsultado = ordenCompraInsumoDAOSQLServer.consultarPorCodigo(ordenCompraInsumoDTO, connection);
		return ordenCompraInsumoDTOConsultado;
	}

	public ArrayList<OrdenCompraInsumoDTO> consultarPorCodigoOrden(OrdenCompraInsumoDTO ordenCompraInsumoDTO, Connection connection) throws Exception, SQLException {
		OrdenCompraInsumoDAOSQLServer ordenCompraInsumoDAOSQLServer = new OrdenCompraInsumoDAOSQLServer();
		ArrayList<OrdenCompraInsumoDTO> ordenCompraInsumoDTOLista = ordenCompraInsumoDAOSQLServer.consultarPorCodigoOrden(ordenCompraInsumoDTO, connection);
		OrdenCompraDAOSQLServer ordenCompraDAOSQLServer = new OrdenCompraDAOSQLServer();
		OrdenCompraDTO ordenCompraDTO = null;
		InsumoDAOSQLServer insumoDAOSQLServer = new InsumoDAOSQLServer();
		InsumoDTO insumoDTO = null;
		for (OrdenCompraInsumoDTO ordenCompraInsumoDTO2 : ordenCompraInsumoDTOLista) {
			ordenCompraDTO = ordenCompraDAOSQLServer.consultarPorCodigo(ordenCompraInsumoDTO2.getOrdenCompraDTO(), connection);
			ordenCompraInsumoDTO2.setOrdenCompraDTO(ordenCompraDTO);
			insumoDTO = insumoDAOSQLServer.consultarPorCodigo(ordenCompraInsumoDTO2.getInsumoDTO(), connection);
			ordenCompraInsumoDTO2.setInsumoDTO(insumoDTO);
		}
		return ordenCompraInsumoDTOLista;
	}

	public ArrayList<OrdenCompraInsumoDTO> consultarTodo(Connection connection) throws Exception, SQLException {
		OrdenCompraInsumoDAOSQLServer ordenCompraInsumoDAOSQLServer = new OrdenCompraInsumoDAOSQLServer();
		ArrayList<OrdenCompraInsumoDTO> ordenCompraInsumoDTOLista = ordenCompraInsumoDAOSQLServer.consultarTodo(connection);
		InsumoDAOSQLServer insumoDAOSQLServer = new InsumoDAOSQLServer();
		InsumoDTO insumoDTO = null;
		OrdenCompraDAOSQLServer ordenCompraDAOSQLServer = new OrdenCompraDAOSQLServer();
		OrdenCompraDTO ordenCompraDTO = null;
		for (OrdenCompraInsumoDTO ordenCompraInsumoDTO : ordenCompraInsumoDTOLista) {
			insumoDTO = insumoDAOSQLServer.consultarPorCodigo(ordenCompraInsumoDTO.getInsumoDTO(), connection);
			ordenCompraInsumoDTO.setInsumoDTO(insumoDTO);
			ordenCompraDTO = ordenCompraDAOSQLServer.consultarPorCodigo(ordenCompraInsumoDTO.getOrdenCompraDTO(), connection);
			ordenCompraInsumoDTO.setOrdenCompraDTO(ordenCompraDTO);
		}
		return ordenCompraInsumoDTOLista;
	}
}
